import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
import numpy as np
"""
时间序列分解 + Prophet预测（适合周期性明显的数据.如日/周规律）
训练速度 快 数据要求中等
优势：
自动处理多周期模式（日/周/年）
支持节假日效应添加
可解释性强
"""
# 生成示例数据（带明显周期性）
def generate_seasonal_data():
    dates = pd.date_range(start="2022-01-01", end="2023-12-31", freq="H")
    base = 50 + 10 * np.sin(np.arange(len(dates)) * 2*np.pi/24)  # 日周期
    seasonal = 20 * np.sin(np.arange(len(dates)) * 2*np.pi/(24 * 365))  # 年周期
    noise = np.random.normal(0, 5, len(dates))
    data = pd.DataFrame({
        'ds': dates,
        'y': base + seasonal + noise
    })
    return data

df = generate_seasonal_data()

# 使用Prophet进行预测
model = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    daily_seasonality=True,
    seasonality_mode='multiplicative'
)
model.fit(df)

# 生成未来预测
future = model.make_future_dataframe(periods=24 * 7, freq='H')  # 预测未来一周
forecast = model.predict(future)

# 可视化
fig = model.plot(forecast)
plt.title("Prophet Electricity Price Forecasting")
plt.show()

# 分解组件
fig2 = model.plot_components(forecast)
plt.show()